/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.hamacekj.dotaznikserver;

import java.awt.Container;
import java.io.IOException;

/**
 * Interface, který musí implementovat každý typ otázek. Každý typ otázek se musí umět
 * odeslat, zobrazit statistiku odpovědí v {@link java.awt.Container Containeru}
 * a udržovat jí aktuální podle příchozích odpovědí přes
 * {@link Question#addReply(cz.hamacekj.dotaznikserver.Connection, java.lang.String[]) addReply()}. 
 * @author Jan Hamáček
 */
public interface Question {
    /**
     * Odešle dotaz podle protokolu a připraví si místo pro odpověď.
     * @param c spojení, přes které se odesílá otázka. Slouží zároveň jako identifikátor odpovědi.
     * @throws IOException Pokud se odesílání nezdařilo.
     */
    public void send(Connection c) throws IOException;
    /**
     * Zpracuje odpověď, která přišla z připojení source, uloží si jí a aktualizuje kontejner vrácený přes getContainer.
     * @param source Příchozí připojení.
     * @param reply Pole řeťězců podle protokolu. Každý řeťězec v poli má význam jedné řádky protokolu. Nemusí obsahovat poslední řádek se samotnou tečkou.
     */
    public void addReply(Connection source, String[] reply);
    
    /**
     * Vrátí krátký popis otázky pro zobrazení v GUI.
     * @return Popis otázky.
     */
    public String getShortDesc();
    
    public void setId(int id);
    public int getId();
    
    
    /**
     * Vrátí kontejner, do kterého se budou průběžně projevovat změny.
     * @return Kontejner, do kterého se budou projevovat změny.
     */
    public Container getContainer();
}